package com.qzsoft.zhjd.server.modules.glodon.gys.wl.domain.dto;

/* -------------------  地磅账单  ------------------- */

import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 地磅账单 详情信息
 */
@Setter
@Getter
public class WeighbridgeBills implements Serializable {

    /**
     * 单据编号（必填）
     * 示例：BL-20170228-YHXMJBZ1-01-0001
     */
    private String BDBH;

    /**
     * 库房名称（必填）
     */
    private String KFMC;

    /**
     * 单据材料（必填）
     */
    private List<BillMaterial> BDCL;

    /**
     * 单据图片列表（非必填）
     */
    private List<BillImg> BDImgs;

    /**
     * 单据引用（非必填）
     */
    private List<Reference> YSYJ;

    /**
     * 云端材料表单据主键 ID（必填） 示例：2035585
     */
    private Long id;

    /**
     * 单据 GUID（必填） 示例：2ddff2d9-050d-4fc9-97e4-36f95d4bf316
     */
    private String GUID;

    /**
     * 合同名称（非必填）
     */
    private String HTMC;

    /**
     * 项目编码（非必填） 示例：110603090000*1#
     */
    private String projectCode;

    /**
     * 项目名称
     */
    private String projectName;

    /**
     * 项目 ID（必填） 示例：1459807
     */
    private Long projectId;

    /**
     * 磅房编码（非必填）
     */
    private String BFBM;

    /**
     * 备注（非必填）
     */
    private String BZ;

    /**
     * 出厂时间（非必填） 示例：20170228100645
     */
    private String CCSJ;

    /**
     * 称毛时间（非必填）
     */
    private String CMSJ;

    /**
     * 称皮时间（非必填）
     */
    private String CPSJ;

    /**
     * 最后修改时间（必填） 示例：20170228102027
     */
    private String ZHXGSJ;

    /**
     * 皮重（非必填） 示例：1
     */
    private Double PZ;

    /**
     * 毛重（非必填） 示例：11
     */
    private Double MZ;

    /**
     * 净重（非必填） 示例：10
     */
    private Double JZ;


    /**
     * 车牌号（必填） 示例：鲁123138
     */
    private String CPH;

    /**
     * 单据来源（必填） 示例：补录
     */
    private String DJLY;

    /**
     * 第三方供应商 ID（非必填） 示例：1854594100
     */
    private String DSFGYSID;

    /**
     * 云端供应商 ID（必填） 示例：1538150
     */
    private Long GSGYSID;

    /**
     * 供应商编码（必填） 示例：C1016097
     */
    private String GYSBM;

    /**
     * 供应商名称（必填） 示例：贵州晟东南物资有限公司
     */
    private String GYSMC;

    /**
     * 打印次数（必填） 示例：0
     */
    private Integer DYCS;

    /**
     * 过磅单位（必填） 示例：吨
     * <p>
     * 固定值 ：吨
     */
    private String GBDW;

    /**
     * 过磅员（必填） 示例：系统管理员
     */
    private String GBY;

    /**
     * 类型：0收料，1发料（必填）
     */
    private Integer LX;

    /**
     * 子类型：采购/调入/甲供/...（必填）
     */
    private String LX_YT;

    /**
     * 单据子类型 id（必填） 示例：1
     */
    private Integer billTypeId;

    /**
     * 是否直入直出（必填） 示例：false
     */
    private Boolean sendOnReceive;

    /**
     * 偏差结果（必填） 示例：0
     * <p>
     * 0 正常， 1 超正差， -1 超负差
     */
    private Integer PCJG;

    /**
     * 状态（必填）1 正常 ，0 作废
     */
    private Integer STATUS;

    /**
     * 皮重偏差结果（非必填）
     */
    private Double PZPCJG;

    /**
     * 单物资（必填） 示例：true
     */
    private Boolean SingleMaterial;

    /**
     * 单据短地址（必填） 示例：/inspection/page/bill.html?...
     */
    private String billUrl;

    /**
     * 业务状态（必填） 示例：0
     */
    private Integer globalStatus;

    /**
     * 创建时间（非必填） 示例：20201106195345
     */
    private String CJSJ;

    /**
     * 最后修改时间（必填） 示例：2021-02-05 09:29:10
     */
    private String LASTUPDATETIME;

    /**
     * 生效标识（非必填） 示例：true
     */
    private Boolean SXBS;

    /**
     * 经办人_出场（非必填）
     */
    private String JBRCC;

    /**
     * 经办人_进场（非必填）
     */
    private String JBRJC;

    /**
     * 磅单整体完成时间
     */
    private Date completionTime;

    /**
     * 上传存储时间！
     */
    private Date SCCCSJ;

    /* 其他若干字段均按上述模式添加…（为节省篇幅，此处不重复展示，可继续扩展） */

    /* ------------------- 单据材料（必填） ------------------- */

    /**
     * 单据材料 BDCL
     */
    @Setter
    @Getter
    public static class BillMaterial implements Serializable {

        /**
         * 材料行 ID（必填）
         * 示例：400001
         */
        private Long BDCLID;

        /**
         * 材料编码（必填） 示例：181801180103180103001
         */
        private String CLBM;

        /**
         * 材料类别编码（必填） 示例：18.1801.180103
         */
        private String CLLBBM;

        /**
         * 材料类别 ID（必填） 示例：2201205
         */
        private Long CLLBID;

        /**
         * 材料类别名称（必填） 示例：挂篮
         */
        private String CLLBMC;

        /**
         * 材料名称（必填） 示例：挂篮模板
         */
        private String CLMC;

        /**
         * 三方材料 ID（非必填） 示例：1798817949
         */
        private String DSFCLID;

        /**
         * 规格型号（必填） 示例：12
         */
        private String GGXH;

        /**
         * 换算系数（非必填） 示例：0.05
         */
        private Double HSXS;

        /**
         * 计量单位（必填） 示例：匹
         */
        private String JLDW;

        /**
         * 确认量 示例：1
         */
        private Integer QRL;

        /**
         * 确认量类型（非必填）
         * <p>
         * -1 无 ，0 运单量， 1 实际量， 2 较小值， 3输入量
         */
        private Integer QRLLX;

        /**
         * 引用关系列表（非必填）
         */
        private List<MaterialRef> BDCLYSYJ;

        /**
         * 附加费列表（非必填）
         */
        private List<Surcharge> surcharges;

        /**
         * AI 材料信息（非必填）
         */
        private AiMaterialInfo aiMaterialInfo;

        /**
         * AI 点根记录（非必填）
         */
        private List<AiRecord> aiRecords;

        /**
         * 业务状态（必填） 示例：0
         */
        private Integer globalStatus;

        /**
         * 项目 ID（必填） 示例：1459807
         */
        private Long projectId;

        /**
         * 租户 ID（必填） 示例：1454160
         */
        private Long tenantId;

        /* 更多字段按需继续添加（为节省篇幅略） */
    }

    /* ------------------- 磅单材料引用关系 ------------------- */

    /**
     * 磅单材料引用关系
     */
    @Setter
    @Getter
    public static class MaterialRef implements Serializable {
        /**
         * 类型；PURCHASEWAYBILL 运单， PROJECT_ORDER 订单， MATERIAL_REQUISITION 申请单， PURCHASECONTRACT 采购合同
         */
        private String LX;
        /**
         * 业务单据编号（如：合同编号，订单编号）示例：CWTHT20210517341T
         */
        private String BM;
        /**
         * 业务来源主键id（如：合同id，订单id）
         */
        private Long DJID;
        /**
         * 业务来源材料主键id（如：合同材料行id，订单材料行id）
         */
        private String DSFDJID;
        /**
         * 引用主表三方id（非必填）
         */
        private Long DJMXID;
        /**
         * 引用材料表三方id（非必填）
         */
        private String DSFDJMXID;
    }

    /* ------------------- 附加费（非必填） ------------------- */

    /**
     * 附加费
     */
    @Setter
    @Getter
    public static class Surcharge implements Serializable {

        /**
         * 附加费编码
         */
        private String code;

        /**
         * 主键id
         */
        private Long id;

        /**
         * 附加费名称
         */
        private String name;

        /**
         * 附加费来源 1：本项目附加费，2合同附加费
         */
        private Integer source;

        /**
         * 附加费单位（非必填）
         */
        private String unit;

        /**
         * 附加费三方id（非必填）
         */
        private String unitId;
    }

    /* ------------------- ai材料信息 ------------------- */

    /**
     * AI 材料信息
     */
    @Setter
    @Getter
    public static class AiMaterialInfo implements Serializable {
        /**
         * 实际理重类型( 0:手输， 1：运单理重 2：已点理重)
         */
        private Integer realWeightType;
        /**
         * 单根米长
         */
        private Double lengthPerMeter;
        /**
         * 实际理重
         */
        private Double realWeight;
        /**
         * 已点理重
         */
        private Double checkWeight;
        /**
         * 材料id
         */
        private Long materialId;
        /**
         * 生产厂家
         */
        private String manufacturer;
        /**
         * 总捆数
         */
        private Integer totalBundle;
        private Long createTime;
        /**
         * 磅单ID
         */
        private Long billId;
        private Long rowTimestamp;
        /**
         * 云端磅单材料表行id
         */
        private Long billMaterialId;
        /**
         * 运单理重
         */
        private Double billWeight;
        private Long id;
        /**
         * 直径
         */
        private Double diam;
    }

    /* ------------------- ai点根图片记录 ------------------- */

    /**
     * AI 点根记录
     */
    @Setter
    @Getter
    public static class AiRecord implements Serializable {
        /**
         * ai识别图片key
         */
        private String aiImgKey;
        /**
         * ai 点根数量
         */
        private Integer aiDistinguishNumber;
        /**
         * 材料id
         */
        private Long materialId;
        /**
         * ai实际理重
         */
        private Double aiRealWeight;
        /**
         * ai查缺补漏根数
         */
        private Integer aiCqblNumber;
        private Long createTime;
        /**
         * 磅单ID
         */
        private Long billId;
        private Long rowTimestamp;
        /**
         * 云端磅单材料表行id
         */
        private Long billMaterialId;
        /**
         * 记录id
         */
        private Long id;
        /**
         * ai实际根数
         */
        private Integer aiRealNumber;
    }

    /* ------------------- BillImg ------------------- */

    /**
     * 单据图片
     */
    @Setter
    @Getter
    public static class BillImg implements Serializable {

        /**
         * 图片分类 0:称毛(磅房、顶部、后部、前部); 1:称皮(磅房、顶部、后部、前部); 2:运单; 5:报表; 8: 称毛车牌图片; 16: 称毛车图片; 32: 称皮车牌图片; 64: 称皮车图片; -1:历史图片;128:出门条;256施工方授权人签名图片; （当单据来源是移动验收时：32: 移动验收/移动发料图片; 64: 电子签名图片;）
         */
        private Integer FL;

        /**
         * 描述 （非必填）
         */
        private String MS;

        /**
         * 图片KEY （必填）
         */
        private String ReadKey;

        /**
         * 磅单ID （必填）
         */
        private Long billId;

        /**
         * 扩展名 （非必填）
         */
        private String extensionName;

        /**
         * 主键 （必填）
         */
        private Long id;

        /**
         * 项目ID （必填）
         */
        private Long projectId;

        /**
         * 租户ID （必填）
         */
        private Long tenantId;
    }

    /* ------------------- Referral ------------------- */

    /**
     * 单据引用
     */
    @Setter
    @Getter
    public static class Reference implements Serializable {
        /**
         * 类型
         * <p>
         * PURCHASEWAYBILL：运单
         * PROJECT_ORDER：订单
         * MATERIAL_REQUISITION：申请单
         * PURCHASECONTRACT：采购合同
         */
        private String LX;
        /**
         * 业务单据编号（如：合同编号，订单编号）
         */
        private String BM;
        /**
         * 业务来源主键id（如：合同id，订单id）
         */
        private Long DJID;
        /**
         * 引用主表三方id(非必填)
         */
        private String DSFDJID;
    }
}
